package ai.people.netmon.framework.domain.system.request;

import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.serializer.ToStringSerializer;
import com.people.core.validator.annotation.NumberStatusValue;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.Max;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;

/**
 * 系统菜单所有参数
 *
 * @author yuanqinglong
 * @date 2022/4/11 11:49
 */
@Data
public class NmSystemMenuAllParam {


    /**
     * 父id
     *
     * @mock 1
     */
    @NotNull(message = "父级id为空")
    @Max(value = Long.MAX_VALUE, message = "父级id数值超出范围")
    @JSONField(serializeUsing = ToStringSerializer.class)
    private Long parentId;

    /**
     * 菜单名称
     *
     * @mock 用户管理
     */
    @NotEmpty(message = "菜单名称为空")
    @Length(max = 50, message = "菜单名称长度最长为{max}")
    private String menuName;

    /**
     * 菜单昵称
     *
     * @mock 用户管理
     */
    @Length(max = 20, message = "菜单昵称长度最长为{max}")
    private String menuNickName;

    /**
     * 菜单类型
     *
     * @mock 1
     */
    @NotNull(message = "菜单类型为空")
    @NumberStatusValue(values = {1, 2, 3}, message = "菜单类型错误")
    private Integer menuType;

    /**
     * 菜单路径
     *
     * @mock tor-global-situation
     */
    @Length(max = 150 , message = "菜单路径长度最长为{max}")
    private String menuPath;

    /**
     * 组件路径
     *
     * @mock AS_GRO_V2
     */
    @Length(max = 100 , message = "组件路径长度最长为{max}")
    private String componentPath;

    /**
     * 菜单级别
     *
     * @mock 1
     */
    @NotNull(message = "菜单级别为空")
    @Range(min = 1, max = 128, message = "菜单级别范围{min} ~ {max}")
    private Integer menuLevel;

    /**
     * 菜单图标
     *
     * @mock nmIconfont
     */
    @Length(max = 200 , message = "菜单图标长度最长为{max}")
    private String menuIcon;

    /**
     * 是否可用（0:不可用，1:可用）
     *
     * @mock 1
     */
    @NotNull(message = "菜单启用状态为空")
    @NumberStatusValue(values = {0, 1}, message = "菜单启用状态值错误")
    private Integer isEnable;

    /**
     * 是否为外链（0:不是，1:是）
     *
     * @mock 1
     */
    @NotNull(message = "外链状态为空")
    @NumberStatusValue(values = {0, 1}, message = "外链状态值错误")
    private Integer isOpen;

    /**
     * 菜单状态（0:隐藏，1:显示 ）
     *
     * @mock 1
     */
    @NotNull(message = "菜单状态为空")
    @NumberStatusValue(values = {0, 1}, message = "菜单状态值错误")
    private Integer isVisible;

    /**
     * 排序
     *
     * @mock 1
     */
    @Max(value = Integer.MAX_VALUE , message = "排序值不可大于{value}")
    private Integer orderNum;

    /**
     * 权限
     * @mock as:acc:add
     */
    private String perms;

    /**
     * 创建用户id
     *
     * @ignore
     */
    private Long createUserId;

    /**
     * 备注
     *
     * @mock 这是备注
     */
    @Length(max = 1000 , message = "备注最长为{max}")
    private String remark;
}
